#include "pch.hpp"
#include "SqliteRDBMS.hpp"

using namespace db;




SqliteRDBMS::SqliteRDBMS()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

SqliteRDBMS::~SqliteRDBMS()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




QString SqliteRDBMS::dataTypeString(TableAttribute::const_Ptr attribute) const
{
	QString result;

	switch(attribute->type())
	{
	case Attribute::Char:      result = "TEXT(1)";    break;
	case Attribute::Byte:      result = "INTEGER(1)"; break;
	case Attribute::Short:     result = "INTEGER(2)"; break;
	case Attribute::Integer:   result = "INTEGER(4)"; break;
	case Attribute::Long:      result = "INTEGER(8)"; break;
	case Attribute::Float:     result = "REAL";       break;
	case Attribute::Double:    result = "REAL";       break;
	case Attribute::String:    result = "TEXT(";
		result += QString::number(attribute->size());
		result += ")";
		break;
	case Attribute::Blob:      result = "BLOB";       break;
	case Attribute::ByteArray: result = "BLOB";       break;
	case Attribute::Boolean:   result = "INTEGER(1)"; break;
	default: BOOSTEXT_THROW(boostext::invalid_value_exception(attribute->type()));
	}

	return result;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString SqliteRDBMS::addAttributeString(Table::const_Ptr table, TableAttribute::const_Ptr attribute) const
{
	QString result;

	result = "alter table ";
	result += table->dbName();
	result += " add column ";
	result += attribute->name();
	result += '\t';
	result += dataTypeString(attribute);

	// TODO: Set flags

	return result;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString SqliteRDBMS::dropAttributeString(Table::const_Ptr table, TableAttribute::const_Ptr attribute) const
{
	BOOSTEXT_THROW(boostext::not_implemented_exception("Dropping attributes is not supported"));
}
///////////////////////////////////////////////////////////////////////////////////////////////////
